/**
 * 创建 Virtual DOM 对象
 * @param {*} type 元素的类型
 * @param {*} props 元素的属性
 * @param  {...any} children 元素的子元素
 */
export default function createElement (type, props, ...children) {
  // 处理后的子节点
  const childElements = [].concat(...children).reduce((result, child) => {
    // 判断节点是否 false 、null 、undefined
    if (child !== false && child !== true && child !== null) {
      // 如果子节点是对象，直接返回
      if (child instanceof Object) {
        result.push(child)
      } else {
        // 如果子节点不是对象，就转换成文本节点，调用 createElement 创建 Virtual DOM 对象
        result.push(createElement("text", { textContent: child }))        
      }
    }
    return result    
  }, [])
  return {
    type,
    // 把 children 属性和 props 合并
    // 可以通过 props.children 获取子节点
    props: Object.assign({children: childElements}, props),
    children: childElements
  }
}